//1. 应用级别的中间件 绑在app实例上的 分为全局中间件和局部中间件 

//2. 路由级别的中间件 绑在express.Router()实例上的中间件 用法与应用级别的中间件没有任何区别  绑在router实例上的

// 3.错误级别的中间件 专门用来捕获整个项目发生的异常错误，从而防止项目异常崩溃的问题
// 格式：function处理函数中，必须有4个形参，形参顺序从前到后，分别是(err,req,res,next)
// const express = require('express')
// const app = express()

// app.get('/', (req, res) => {
//     //1.人为的制造错误
//     throw new Error('服务器内部发生错误')
//     res.send('home page')
// })

// app.use((err, req, res, next) => {
//     console.log('发生了错误：' + err.message)
//     res.send('Error' + err.message)
// })

// app.listen('80', () => {
//     console.log('http://127.0.0.1')
// })

// 注意：错误级别的中间件，必须注册在所有路由之后

//4.Express内置的中间件
//(1).express.static 快速托管静态资源的内置中间件
// (2).express.json 解析JSON格式的请求体数据(有兼容性)
// 配置解析 applicabtion/json 格式数据的内置中间件
// app.use(express.json())
//(3).express.urlencoded 解析URL-encoded格式的请求体数据(有兼容性)
// 配置解析 applicabtion/x-www-form-urlencoded 格式数据的内置中间件
// app.use(express.urlencoded({ extends: false }))

// const express = require('express')
// const app = express()

// // 通过express.json()这个中间件，解析表单中的JSON格式的数据
// app.use(express.json())

// // 通过express.urlencoded()这个中间件，解析表单中的urlencoded格式的数据
// app.use(express.urlencoded({ extends: false }))

// app.get('/', (req, res) => {
//     // 在服务器，可以使用req.body这个属性，来接收客户端发送过来的请求体数据
//     // 在默认情况下，如果不配置解析表单数据的中间件，则req.body默认等于undefined
//     console.log(req.body)
//     res.send('ok')
// })

// app.listen('80', () => {
//     console.log('http://127.0.0.1')
// })

//5.第三方的中间件
// (1) npm install body-parser安装中间件
// (2) require导入中间件
// (3)调用app.use()注册并使用中间件


